package com.nyt.report;;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.ProtocolException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Map;

public abstract class HttpPost {

    /**
     * post请求
     *
     * 请求成功则返回结果（200）
     * 请求失败则抛出异常（300,400,500，各种timeout等）
     *
     * @param httpurl
     * @param json
     * @return
     */
    public static String postJson(String httpurl, String json) {
        HttpURLConnection connection = null;
        InputStream is = null;
        OutputStream os = null;
        BufferedReader br = null;
        String result = null;   // 结果
        try{
            // 创建请求
            URL url = new URL(httpurl);
            connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("POST");
            connection.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
            connection.setConnectTimeout(15000);        // 15秒连接超时
            connection.setReadTimeout(60000);   // 60秒读超时
            connection.setDoInput(true);
            connection.setDoOutput(true);
            connection.connect();

            // 传输参数
            os = connection.getOutputStream();
            os.write(json.getBytes("UTF-8"));
            os.flush();

//            if (connection.getResponseCode() == 200) {
                is = connection.getInputStream();
                // 对输入流对象进行包装:charset根据工作项目组的要求来设置
                br = new BufferedReader(new InputStreamReader(is, "UTF-8"));

                StringBuffer sbf = new StringBuffer();
                String temp = null;
                // 循环遍历一行一行读取数据
                while ((temp = br.readLine()) != null) {
                    sbf.append(temp);
                    //sbf.append("\r\n");
                }
                result = sbf.toString();
//            }
//            else {
//
//            }
        }
        catch (Exception e){
            e.printStackTrace();
        } finally {
            // 关闭资源
            if (null != br) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != is) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != os) {
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != connection) {
                connection.disconnect();// 关闭远程连接
            }
        }
        return result;
    }

//    /**
//     * get请求
//     *
//     * 请求成功则返回结果（200）
//     * 请求失败则抛出异常（300,400,500，各种timeout等）
//     *
//     * @param httpurl
//     * @param params
//     * @return
//     */
//    public static String postForm(String httpurl, Map params) throws CstException {
//        HttpURLConnection connection = null;
//        InputStream is = null;
//        OutputStream os = null;
//        BufferedReader br = null;
//        String result = null;   // 结果
//        try{
//            // 创建请求
//            URL url = new URL(httpurl);
//            connection = (HttpURLConnection) url.openConnection();
//            connection.setRequestMethod("POST");
//            connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
//            connection.setConnectTimeout(15000);        // 15秒连接超时
//            connection.setReadTimeout(60000);   // 60秒读超时
//            connection.setDoInput(true);
//            connection.setDoOutput(true);
//            connection.connect();
//
//            // 传输参数
//            String paramsStr = transformParams(params);
//            os = connection.getOutputStream();
//            os.write(paramsStr.getBytes("UTF-8"));
//            os.flush();
//
//            if (connection.getResponseCode() == 200) {
//                is = connection.getInputStream();
//                // 对输入流对象进行包装:charset根据工作项目组的要求来设置
//                br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
//
//                StringBuffer sbf = new StringBuffer();
//                String temp = null;
//                // 循环遍历一行一行读取数据
//                while ((temp = br.readLine()) != null) {
//                    sbf.append(temp);
//                    //sbf.append("\r\n");
//                }
//                result = sbf.toString();
//            }
//            else {
//                throw new CstException(ExpType.EXP_RC_HTTP,
//                        "Request Error, ResponseCode: "+connection.getResponseCode(),
//                        JSON.toJSONString(params),
//                        null);
//            }
//        }
//        catch (UnsupportedEncodingException e) {
//            throw new CstException(ExpType.EXP_RC_HTTP,
//                    "Encoding Exception When transform url, Message: "+ e.getMessage(),
//                    JSON.toJSONString(params),
//                    e);
//        } catch (ProtocolException e) {
//            throw new CstException(ExpType.EXP_RC_HTTP,
//                    "Http Connection Fail, Message: "+ e.getMessage(),
//                    JSON.toJSONString(params),
//                    e);
//        }  catch (IOException e) {
//            throw new CstException(ExpType.EXP_RC_HTTP,
//                    "IOException When Reading Response, Message: "+ e.getMessage(),
//                    JSON.toJSONString(params),
//                    e);
//        } finally {
//            // 关闭资源
//            if (null != br) {
//                try {
//                    br.close();
//                } catch (IOException e) {
//                    e.printStackTrace();
//                }
//            }
//            if (null != is) {
//                try {
//                    is.close();
//                } catch (IOException e) {
//                    e.printStackTrace();
//                }
//            }
//            if (null != os) {
//                try {
//                    os.close();
//                } catch (IOException e) {
//                    e.printStackTrace();
//                }
//            }
//            if (null != connection) {
//                connection.disconnect();// 关闭远程连接
//            }
//        }
//        return result;
//    }
//
//    private static String transformParams(Map<String, Object> params) throws UnsupportedEncodingException {
//        String paramsStr = "";
//        // 准备请求参数
//        if (params != null && params.size() > 0) {
//            for (String key : params.keySet()) {
//                paramsStr = "&" + key + "=" + URLEncoder.encode(params.get(key).toString(), "UTF-8");
//            }
//            paramsStr.replaceFirst("&", "");
//        }
//        return paramsStr;
//    }
}
